Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替 您所在的位置:网站首页 LiVeCombined BSubtllls and Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替

Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替

2024-05-04 05:38| 来源: 网络整理| 查看: 265

Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替

在本文中,我们将会介绍Pandas所提供的整数和整数数组与时间戳加减操作的相关知识点,以及其最近不再支持这种加减操作的原因和如何应对。

阅读更多:Pandas 教程

Pandas整数和整数数组

在Pandas中,整数和整数数组是经常被使用的一种数据类型。在对整数和整数数组进行加减操作时,Pandas往往支持直接添加或减去一个整数n。例如,我们有如下的Pandas数据,表示了10天的日期:

import pandas as pd import numpy as np dates = pd.Series(pd.date_range('2021-01-01', periods=10))

我们希望将这些日期向后移动2天,则可以直接使用如下的语句:

new_dates = dates + 2

这时候,new_dates将会变成这样:

0 2021-01-03 1 2021-01-04 2 2021-01-05 3 2021-01-06 4 2021-01-07 5 2021-01-08 6 2021-01-09 7 2021-01-10 8 2021-01-11 9 2021-01-12 dtype: datetime64[ns]

这里,new_dates中的每个日期都向后移动了2天。

Pandas时间戳

除了整数和整数数组,Pandas还提供了时间戳的数据类型。时间戳是指某个具体时刻的时间点,可以由Pandas的Timestamp类来表示。我们可以这样来创建一个时间戳:

ts = pd.Timestamp('2021-01-01') Pandas整数和整数数组,以及时间戳的加减操作

在早期的版本中,Pandas支持直接对整数和整数数组与时间戳进行加减操作。例如,代码如下:

dates + ts

这样的操作是将每个日期加上时间戳的时间差。例如,假设时间戳为ts = pd.Timestamp('2021-01-01 12:00:00'),则加上ts之后,new_dates将会变成这个样子:

0 2021-01-01 12:00:00 1 2021-01-02 12:00:00 2 2021-01-03 12:00:00 3 2021-01-04 12:00:00 4 2021-01-05 12:00:00 5 2021-01-06 12:00:00 6 2021-01-07 12:00:00 7 2021-01-08 12:00:00 8 2021-01-09 12:00:00 9 2021-01-10 12:00:00 dtype: datetime64[ns]

然而,在最近的Pandas版本中,这种加减操作已经不再支持。如果我们按照旧的方式进行加减操作,则会得到一个DeprecationWarning警告。实际运行过程中,可以发现这样的操作将会抛出异常错误,例如:

dates + ts

TypeError: Addition/subtraction of integers and integer-arrays with Timestamp is no longer supported. Instead of adding/subtracting n, use n * obj.freq

改进的加减操作

那么,Pandas要我们如何进行加减操作?Pandas现在推荐我们使用n * obj.freq来替代原来的操作。obj.freq表示时间戳的频率,例如obj.freq = 'D'表示以天为单位进行时间戳加减操作。我们可以这样将上述的加减操作修改为新的方式:

new_dates = dates + 2 * pd.offsets.Day()

这里,pd.offsets.Day()表示一个时间偏移量,也就是时间间隔为1天的时间差。将2乘以这个时间差,即可得到需要向后移动的总时间差。这个新的操作将会得到与原来相同的结果:

0 2021-01-03 1 2021-01-04 2 2021-01-05 3 2021-01-06 4 2021-01-07 5 2021-01-08 6 2021-01-09 7 2021-01-10 8 2021-01-11 9 2021-01-12 dtype: datetime64[ns]

在实际操作中,如果我们需要将时间戳向后或向前移动一个指定的时间间隔,那么按照新的方式应该这样来进行操作:

ts_new = ts + 2 * pd.offsets.Day()

这样,ts_new将会是原来的时间戳加上2天的时间间隔:

Timestamp('2021-01-03 00:00:00') 总结

Pandas已经不再支持直接对整数和整数数组进行加减操作,同时也不再支持将时间戳与整数和整数数组进行加减操作。相反,Pandas要求我们使用新的方式,即通过乘以时间间隔的方式,来实现对整数和整数数组,以及时间戳的加减操作。这种方式无疑会更加灵活和方便,能够满足更多的数据处理需求。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有